home *** CD-ROM | disk | FTP | other *** search
/ Aminet 37 / Aminet 37 (2000)(Schatztruhe)[!][Jun 2000].iso / Aminet / dev / lang / sofa.lha / sofa / smalleiffel / lib_show / iterator / example1.e next >
Text File  |  2000-03-25  |  3KB  |  128 lines

  1. -- This file is  free  software, which  comes  along  with  SmallEiffel. This
  2. -- software  is  distributed  in the hope that it will be useful, but WITHOUT
  3. -- ANY  WARRANTY;  without  even  the  implied warranty of MERCHANTABILITY or
  4. -- FITNESS  FOR A PARTICULAR PURPOSE. You can modify it as you want, provided
  5. -- this header is kept unaltered, and a notification of the changes is added.
  6. -- You  are  allowed  to  redistribute  it and sell it, alone or as a part of
  7. -- another product.
  8. --          Copyright (C) 1994-98 LORIA - UHP - CRIN - INRIA - FRANCE
  9. --            Dominique COLNET and Suzanne COLLIN - colnet@loria.fr
  10. --                       http://SmallEiffel.loria.fr
  11. --
  12. class EXAMPLE1
  13.    --
  14.    -- Using ITERATOR allows the user to traverse any aggregate object
  15.    -- in a more abstract way.
  16.    --
  17.  
  18. creation make
  19.  
  20. feature
  21.  
  22.    my_loop(type: STRING; my_iterator: ITERATOR[CHARACTER]) is
  23.       local
  24.      element: CHARACTER;
  25.       do
  26.          io.put_string("Loop on ");
  27.          io.put_string(type);
  28.          io.put_string(": ");
  29.      from
  30.         my_iterator.start;
  31.      until
  32.         my_iterator.is_off
  33.      loop
  34.         element := my_iterator.item;
  35.             io.put_character(element);
  36.         my_iterator.next;
  37.      end;
  38.          io.put_new_line;
  39.       end;
  40.  
  41. feature {NONE}
  42.  
  43.    make is
  44.       do
  45.      use_iterator_on_string;
  46.      use_iterator_on_array;
  47.      use_iterator_on_fixed_array;
  48.      use_iterator_on_linked_list;
  49.      use_iterator_on_two_way_linked_list;
  50.          io.put_string("Do you like ITERATORs ?%N");
  51.  
  52.          io.put_string("So let's see what happends with a DICTIONARY.%N");
  53.      use_iterator_on_dictionary;
  54.          io.put_string("And this is not a bug!%N");
  55.       end;
  56.  
  57.    use_iterator_on_string is
  58.       local
  59.          iterator: ITERATOR[CHARACTER];
  60.       do
  61.      iterator := ("foo").get_new_iterator;
  62.      my_loop("STRING",iterator);
  63.       end;
  64.  
  65.    use_iterator_on_array is
  66.       local
  67.      iterator: ITERATOR[CHARACTER];
  68.       do
  69.      iterator := (<<'b','a','r'>>).get_new_iterator;
  70.      my_loop("ARRAY",iterator);
  71.       end;
  72.  
  73.    use_iterator_on_fixed_array is
  74.       local
  75.      iterator: ITERATOR[CHARACTER];
  76.          my_fa: FIXED_ARRAY[CHARACTER];
  77.       do
  78.          !!my_fa.with_capacity(4);
  79.          my_fa.add_last('f');
  80.          my_fa.add_last('O');
  81.          my_fa.add_last('o');
  82.          iterator := my_fa.get_new_iterator;
  83.      my_loop("FIXED_ARRAY",iterator);
  84.       end;
  85.  
  86.    use_iterator_on_linked_list is
  87.       local
  88.      iterator: ITERATOR[CHARACTER];
  89.      ll: LINKED_LIST[CHARACTER];
  90.       do
  91.      !!ll.make;
  92.      ll.add_last('B');
  93.      ll.add_last('a');
  94.      ll.add_last('R');
  95.      iterator := ll.get_new_iterator;
  96.      my_loop("LINKED_LIST",iterator);
  97.       end;
  98.  
  99.    use_iterator_on_two_way_linked_list is
  100.       local
  101.      iterator: ITERATOR[CHARACTER];
  102.      twll: TWO_WAY_LINKED_LIST[CHARACTER];
  103.       do
  104.      !!twll.make;
  105.      twll.add_last('F');
  106.      twll.add_last('o');
  107.      twll.add_last('O');
  108.      iterator := twll.get_new_iterator;
  109.      my_loop("TWO_WAY_LINKED_LIST",iterator);
  110.       end;
  111.  
  112.    use_iterator_on_dictionary is
  113.       local
  114.      iterator: ITERATOR[CHARACTER];
  115.      d: DICTIONARY[CHARACTER,CHARACTER];
  116.       do
  117.      !!d.make;
  118.      d.put('o','B');
  119.      d.put('f','a');
  120.      d.put('O','R');
  121.          iterator := d.get_new_iterator_on_items;
  122.      my_loop("DICTIONARY (items)",iterator);
  123.          iterator := d.get_new_iterator_on_keys;
  124.      my_loop("DICTIONARY (keys)",iterator);
  125.       end;
  126.  
  127. end
  128.